package com.mini.grpc.transport;

import com.mini.grpc.common.Metadata;
import com.mini.grpc.common.Status;

/**
 * ServerStream接口定义了服务端流的功能。
 * 
 * <p>服务端流表示一个RPC调用的通信通道，用于接收请求和发送响应。
 *
 * @param <RespT> 响应类型
 */
public interface ServerStream<RespT> {
    
    /**
     * 发送头部元数据
     *
     * @param headers 头部元数据
     */
    void sendHeaders(Metadata headers);
    
    /**
     * 发送消息
     *
     * @param message 要发送的消息
     */
    void sendMessage(RespT message);
    
    /**
     * 关闭流
     *
     * @param status 关闭状态
     * @param trailers 尾部元数据
     */
    void close(Status status, Metadata trailers);
    
    /**
     * 请求接收指定数量的消息
     *
     * @param numMessages 请求的消息数量
     */
    void request(int numMessages);
    
    /**
     * 获取流的唯一标识符
     *
     * @return 流ID
     */
    int getStreamId();
    
    /**
     * 取消流
     */
    void cancel();
} 